Projekt Pronal Projekt Pronal

Kazalo:
Sofinasiranje projekta
Starejši - učbenik...
Starejši - zbirka nalog...
Tekmovanja...
Tekmovanja - dopolni...
Tekmovanja - popravi...
Tekmovanja - Parsons
rtk 1988
rtk 1996
rtk 1998
rtk 1999
rtk 2000
rtk 2001
rtk 2002
rtk 2004
rtk 2006
rtk 2007
rtk 2008
rtk 2009
rtk 2014
rtk 2016
rtk 2017
rtk 2018
rtk 2004

rtk 2004


2004.1.1

1. podnaloga

Pri pisanju sporočil na prenosne telefonu moramo vsakič, ko dve sosednji črki pripadata isti tipki prenosnega telefona, malce počakati.

Če želimo na primer natipkati besedilo bacil, moramo pritisniti tipke: 2 2 (za b), 2 (za a), 2 2 2 (za c), 4 4 4 (za i), 5 5 5 (za l). To pomeni, da moramo dvakrat malce počakati - preden natipkamo a in preden natipkamo c.

Naloga

Imamo funkcijo sms(besedilo), ki kot parameter besedilo sprejme niz znakov angleške abecede in presledkov, vrne pa število čakanj, da lahko natipkamo naslednji znak. Predpostavimo da besedilo vsebuje le male črke angleške abecede. Vendar pa se je programer na žalost zelo neroden in je pomešal vrstice.

def sms(besedilo):
    """funkcija kot parameter besedilo dobi niz znakov in vrne število kolikokrat
    moramo počakati, da natipkamo besedilo na telefon"""
    tipkovnica = {' ':1, 'a':2, 'b':2, 'c':2, 'd':3, 'e':3, 'f':3, 'g':4, 'h':4,
    'i': 4, 'j':5, 'k':5, 'l':5, 'm':6, 'n':6, 'o':6, 'p':7, 'q':7, 'r':7, 's':7,
    't': 8, 'u':8, 'v':8, 'w':9, 'x':9, 'y':9, 'z':9}
    if len(besedilo) < 2:
    prejsnja = besedilo[0]
    for crka in besedilo[1:]:
    prejsnja = crka
    cakanje += 1
    if tipkovnica[crka] == tipkovnica[prejsnja]:
    else:
    cakanje = 0
    return cakanje
    return cakanje

Pomagaj mu popraviti funkcijo. Uredi vrstice in jih ustrezno zamakni tako, da bo funkcija delovala pravilno.

Razpored po tipkah: $1$ - (presledek), $2$ - abc, $3$ - def, $4$ - ghi, $5$ - jkl, $6$ - mno, $7$ - pqrs, $8$ - tuv, $9$ - wxyz.

Vhodni podatki

Argument besedilo vsebuje en niz sestavljen iz malih znakov angleške abecede in presledkov.

Izhodni podatki

Funkcija vrne eno samo število (število čakanj).

Primer

Vhod
>>> sms('rabarbara in brokoli')
Izhod
3

Uradna rešitev

def sms(besedilo):
    """funkcija kot parameter besedilo dobi niz znakov in vrne število kolikokrat
    moramo počakati, da natipkamo besedilo na telefon"""
    cakanje = 0
    tipkovnica = {' ':1, 'a':2, 'b':2, 'c':2, 'd':3, 'e':3, 'f':3, 'g':4, 'h':4,
    'i': 4, 'j':5, 'k':5, 'l':5, 'm':6, 'n':6, 'o':6, 'p':7, 'q':7, 'r':7, 's':7,
    't': 8, 'u':8, 'v':8, 'w':9, 'x':9, 'y':9, 'z':9}
    if len(besedilo) < 2:
        return cakanje
    prejsnja = besedilo[0]
    for crka in besedilo[1:]:
        if tipkovnica[crka] == tipkovnica[prejsnja]:
            cakanje += 1
        else:
            prejsnja = crka
    return cakanje

2004.2.1

1. podnaloga

Naloga

Imamo funkcijo novo_zaporedje(n, vhodno_zaporedje) , ki sprejme naravno število n in vhodno zaporedje vhodno_zaporedje, v katerem je n števil večjih od $0$ in manjših ali enakih n (med seboj ne nujno različnih). Funkcija gre po vrsti po vhodnem zaporedju ter v novo izhodno zaporedje doda za vsako število novo najmanjše število, ki je večje ali enako trenutnemu številu v vhodnem zaporedju. Če je novo število večje od n, funkcija namesto tega števila v novo zaporedje doda najmanjše število, ki je manjše ali enako trenutnemu številu v vhodnem zaporedju, vendar novo število še ni v izhodnem zaporedju.

def novo_zaporedje(n, vhodno_zaporedje):
    """na podlagi vhodnega zaporedja vrne izhodno zaporedje"""
    izhodno_zaporedje = []
    neizpisana = {i + 1 for i in range(n)}
    for st_vhodno in vhodno_zaporedje:
    if st_vhodno + 1 <= n:
    st_vhodno = 1
    neizpisana.remove(st_vhodno)
    izhodno_zaporedje.append(st_vhodno)
    break
    else:
    if st_vhodno in neizpisana:
    st_vhodno += 1
    else:
    while True:
    return izhodno_zaporedje

Vendar pa so se vrstice v funkciji zmešale. Uredi vrstice tako, da bo program deloval pravilno.

Vhodni podatki

Funkcija novo_zaporedje(n, vhodno_zaporedje) sprejme število n, ki je naravno število, in pa seznam vhodno_zaporedje dolžine n, ki vsebuje naravna števila manjša ali enaka n.

Izhodni podatki

Funkcija vrne seznam dolžine n, ki vsebuje naravna števila glede na vhodno zaporedje.

Primer

Vhod
>>> novo_zaporedje(10, [6, 6, 6, 6, 5, 3, 3, 1, 1, 1])
Izhod
[6, 7, 8, 9, 5, 3, 4, 1, 2, 10]

Uradna rešitev

def novo_zaporedje(n, vhodno_zaporedje):
    """na podlagi vhodnega zaporedja vrne izhodno zaporedje"""
    izhodno_zaporedje = []
    neizpisana = {i + 1 for i in range(n)}
    for st_vhodno in vhodno_zaporedje:
        while True:
            if st_vhodno in neizpisana:
                neizpisana.remove(st_vhodno)
                izhodno_zaporedje.append(st_vhodno)
                break
            else:
                if st_vhodno + 1 <= n:
                    st_vhodno += 1
                else:
                    st_vhodno = 1
    return izhodno_zaporedje
Mesto objave ob koncu projekta 15.9.2018